package miage.rest.resource;


import org.picocontainer.MutablePicoContainer;
import org.restlet.Context;
import org.restlet.Request;
import org.restlet.Response;
import org.restlet.resource.Finder;
import org.restlet.resource.ServerResource;

/**
 * Finder qui permet de créer des ressources en utilisant le conteneur
 * d'injection de dépendances
 * 
 * @author Schwartz Michaël
 */
public class ResourceFinder extends Finder {
	private final MutablePicoContainer container;

	public ResourceFinder(MutablePicoContainer container, Context context, Class targetClass) {
		super(context, targetClass);
		this.container = container;
	}

	/**
	 * Créer une ressource en utilisant le conteneur d'injection de dépendances
	 * @param targetClass
	 * @param request
	 * @param response
	 * @return la ressource correctement instancié avec ses dépendances
	 */
	@Override
	public ServerResource create(Class<? extends ServerResource> targetClass, Request request, Response response) {

		ServerResource resource =  container.getComponent(targetClass);

		if (resource == null) {
			container.addComponent(targetClass);
			resource =  container.getComponent(targetClass);
		} 

		return resource;
	}
	
}
